/*** @ClassName: CartService.java
 * @Description: TODO(用一句话描述该文件做什么) 
 * @author LeiJia
 * @version 
 * @Date 2017年3月8日 下午2:04:11
 */
package com.sc.service.cart;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.sc.dal.mapper.cart.CartMapper;
import com.sc.dal.mapper.goods.GoodsStockMapper;
import com.sc.dal.model.cart.Cart;
import com.sc.dal.model.cart.CartItem;
import com.sc.dal.model.cart.Shop;
import com.sc.dal.model.goods.GoodsStock;
import com.sc.dal.model.member.Member;
import com.sc.service.BaseServiceImpl;
import com.sc.util.data.CookieUtils;
import com.sc.util.data.SessionContainer;

/**
 * @ClassName: CartService
 * @Description: 处理购物车业务逻辑层
 * @author LeiJia
 * @date 2017年3月8日 下午2:09:26
 * @version V1.0
 */
@Service
public class CartService extends  BaseServiceImpl<CartItem>{

	@Autowired
	private CartMapper cartMapper;
	
	@Autowired
	private  GoodsStockMapper goodsStockMapper;


	//更新session或cookie购物车中的商品数量
	public  void updateSessionCookieCartCount(HttpServletRequest request,HttpServletResponse response){
		String SID = request.getSession().getId(); //sessionID
		Member member = SessionContainer.getSessionMember(request); //session和cookie中的用户信息
		//更新session和cookie中的购物车数量
		Cart cart = new Cart();
		cart.setMemberId(member.getmId());
		int count =count(cart);
		//购物车中的商品数量
		request.getSession().setAttribute(SessionContainer.myCartProductCount + SID,count);
		CookieUtils.setCookie(request, response, SessionContainer.myCartProductCount, count+"");
		
	}
	/**
	 * @Title: updateCart
	 * @Description:修改购物车商品
	 * @param mid
	 * @date 2017年3月8日 14:30:05
	 * @author LeiJia  
	 * @return List<Cart>    返回类型
	 */
	public int updateCart(Cart cart){
		return cartMapper.updateByPrimaryKey(cart);
	}
	/**
	 * @Title: getCartByCartId
	 * @Description:通过购物车ID获取购物车中的某个商品
	 * @param mid
	 * @date 2017年3月8日 14:30:05
	 * @author LeiJia  
	 * @return List<Cart>    返回类型
	 */
	public Cart getCartByCartId(String id){
		return cartMapper.selectByPrimaryKey(id);
	}
	
	public Cart getCartByProdcutIdAndMemberId(Integer productId,String memberId){
		Cart cart = new Cart();
		cart.setMemberId(memberId);
		cart.setProductId(productId);
		return cartMapper.getCartByProdcutId(cart);
	}
	
	/**
	 * @Title: selectByParam
	 * @Description:获取购物车商品列表
	 * @param item
	 * @date 2017年3月8日 14:30:05
	 * @author LeiJia  
	 * @return List<Cart>    返回类型
	 */
	public List<CartItem> selectByParam(CartItem item){
		List<CartItem>  list = cartMapper.selectByParam(item);
		return list;
	}
	
	
	/**
	 * @Title: selectByMapParam
	 * @Description:获取购物车商品列表
	 * @param paramMap
	 * @date 2017年4月21日 14:30:05
	 * @author LeiJia  
	 * @return List<Cart>    返回类型
	 */
	public List<CartItem> selectByMapParam(Map<String,Object> paramMap){
		List<CartItem>  list = cartMapper.selectByMapParam(paramMap);
		return list;
	}

	/**
	 * @Title: cartShopList
	 * @Description:获取购物车商品列表
	 * @param paramMap
	 * @date 2017年4月21日 14:30:05
	 * @author LeiJia  
	 * @return List<Cart>    返回类型
	 */
	public List<Shop> cartShopList(CartItem item){
		return cartMapper.cartShopList(item);
	}
	
	
	//根据会员ID商品ID，商品规格ID查找购物车商品
	public List<Cart> selectByCartInfo(Cart cart){
		return cartMapper.selectByCartInfo(cart);
	}
	/**
	 * @Title: addProduct
	 * @Description:向购物车添加商品
	 * @param cart
	 * @date 2017年3月9日下午17:30:05
	 * @author LeiJia  
	 * @return int    返回类型
	 */
	public int addProduct(Cart cart,int mount){
		List<Cart> list = cartMapper.selectByCartInfo(cart);//查询购物车中同规格商品的购物车项
		if(list == null || list.size() <1){
			cart.setQuantity(mount);
			return  cartMapper.insert(cart);
		}
		//如果商品在购物车中已经存在,quantity数量增加mount
		Cart c =list.get(0);
		c.setGoods_sku_id(cart.getGoods_sku_id());
		c.setGoods_sku_info(cart.getGoods_sku_info());
		c.setQuantity(c.getQuantity() +mount);
		c.setSelected(cart.getSelected());
		c.setIsDelete(cart.getIsDelete());
		c.setIsValid(cart.getIsValid());
		c.setModifyDate(new Date());
		return cartMapper.updateByPrimaryKey(c);
		
	}
	
	public int insert(Cart cart){
		return cartMapper.insert(cart);
	}
	/**
	 * @Title: count
	 * @Description:统计购物车商品数量
	 * @param cart
	 * @date 2017年3月9日下午17:50:05
	 * @author LeiJia  
	 * @return int    返回类型
	 */
	public int count(Cart cart){
		return cartMapper.count(cart);
	}
	/** 
	 * @Title: count
	 * @Description:统计购物车商品数量
	 * @param cart
	 * @date 2017年3月9日下午17:50:05
	 * @author LeiJia  
	 * @return int    返回类型
	 */
	public int deleteProduct(Cart cart) {
		return cartMapper.updateByPrimaryKey(cart);
	}
	
	public int  selectBaseQuantity(GoodsStock stock){
		return goodsStockMapper.selectBaseQuantity(stock);
	}
    
    public int selectSaleBaseQuantity(GoodsStock stock){    	
		return goodsStockMapper.selectSaleBaseQuantity(stock);
	}
}
